home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / timer11.zip / MAIN.C < prev    next >
C/C++ Source or Header  |  1992-04-21  |  2KB  |  108 lines

  1. /****************************************************************************
  2. *
  3. *                                 Zen Timer
  4. *
  5. *                               From the book
  6. *                         "Zen of Assembly Language"
  7. *                            Volume 1, Knowledge
  8. *
  9. *                             by Michael Abrash
  10. *
  11. *                    Simple Test program by Kendall Bennett
  12. *
  13. * Filename:        $RCSfile: main.c $
  14. * Version:        $Revision: 1.2 $
  15. *
  16. * Language:        ANSI C
  17. * Environment:    MS DOS (IBM PC)
  18. *
  19. * Description:    Test program for the Zen Timer Library.
  20. *
  21. * $Id: main.c 1.2 92/04/20 17:34:03 kjb release $
  22. *
  23. * Revision History:
  24. * -----------------
  25. *
  26. * $Log:    main.c $
  27. * Revision 1.2  92/04/20  17:34:03  kjb
  28. * Modified to allow timing across a midnight boundary
  29. * Revision 1.1  92/01/27  21:43:06  kjb
  30. * Initial revision
  31. ****************************************************************************/
  32.  
  33. #include <stdio.h>
  34. #include <dos.h>
  35. #include "debug.h"
  36. #include "ztimer.h"
  37.  
  38. #define    DELAY_SECS    10
  39.  
  40. /*-------------------------- Implementation -------------------------------*/
  41.  
  42. /* The following routine takes a long count in microseconds and outputs
  43.  * a string representing the count in seconds. It could be modified to
  44.  * return a pointer to a static string representing the count rather
  45.  * than printing it out.
  46.  */
  47.  
  48. void ReportTime(ulong count)
  49. {
  50.     ulong    secs;
  51.  
  52.     secs = count / 1000000L;
  53.     count = count - secs * 1000000L;
  54.     printf("Time taken: %lu.%06lu seconds\n",secs,count);
  55. }
  56.  
  57. int        i,j;                                /* NON register variables! */
  58.  
  59. int main(void)
  60. {
  61.     ulong    count,start,finish;
  62.  
  63.     /* Test the precision timer routine */
  64.  
  65.     PZTimerOn();
  66.     for (i = 0; i < 10000; i++)
  67.         i = i;
  68.     PZTimerOff();
  69.     PZTimerReport();
  70.     count = PZTimerCount();
  71.     printf("Count returned: %lu\n",count);
  72.  
  73.     /* Test the precision timer routine for overflow */
  74.  
  75.     PZTimerOn();
  76.     for (j = 0; j < 10; j++)
  77.         for (i = 0; i < 20000; i++)
  78.             i = i;
  79.     PZTimerOff();
  80.     PZTimerReport();
  81.     count = PZTimerCount();
  82.     printf("Count returned: %lu\n",count);
  83.  
  84.     /* Test the long period Zen Timer (we don't check for overflow coz
  85.      * it would take tooooo long!)
  86.      */
  87.  
  88.     LZTimerOn();
  89.     for (j = 0; j < 10; j++)
  90.         for (i = 0; i < 20000; i++)
  91.             i = i;
  92.     LZTimerOff();
  93.     LZTimerReport();
  94.     ReportTime(LZTimerCount());
  95.  
  96.     /* Test the ultra long period Zen Timer */
  97.  
  98.     start = ULZReadTime();
  99.     delay(DELAY_SECS * 1000);
  100.     finish = ULZReadTime();
  101.     printf("Delay of %d secs took %d 1/10ths of a second\n",
  102.         DELAY_SECS,ULZElapsedTime(start,finish));
  103.  
  104.     return 0;
  105. }
  106.